import cv2
import numpy as np
# img_original = cv2.imread('D:/tools/image_operation/duola.png')
from _00tools import cv_show
"""
@Project: pythonPro1
@Name: _07corrosion.py
@Author: linxin_liu
@Date: 2022/10/14 20:11
腐蚀操作、膨胀操作、开运算(先腐蚀再膨胀)、闭运算(先膨胀再腐蚀)
"""
img_original = cv2.imread('D:/tools/image_operation/dige.png')
kernel = np.ones((5, 5), np.uint8)  # 盒子
corrosion = cv2.erode(img_original, kernel, iterations=1)  # 迭代(腐蚀)一次
# cv_show('a', corrosion, 3000)
dilate = cv2.dilate(corrosion, kernel, iterations=1)  # 迭代性(膨胀)一次
# cv_show('b', dilate, 3000)

opening = cv2.morphologyEx(img_original, cv2.MORPH_OPEN, kernel)
# cv_show('C', opening, 3000)
closing = cv2.morphologyEx(img_original, cv2.MORPH_CLOSE, kernel)
# cv_show('D', closing, 3000)

# 梯度运算：可以检测(获取)到边界，
# 思路：可以通过将一个图像的膨胀和腐蚀结果相减来获得梯度图像(边界轮廓图像)。
gradient = cv2.morphologyEx(img_original, cv2.MORPH_GRADIENT, kernel)
# cv_show('D', gradient, 3000)

'''
礼帽(只剩刺) = 原始输入(有刺)-开运算结果(没有刺)
黑帽(只剩下原始的一些小轮廓) =  闭运算结果(有刺) - 原始输入(有刺)
'''
top_hat = cv2.morphologyEx(img_original, cv2.MORPH_TOPHAT, kernel)
# cv_show('e', top_hat, 3000)
black_hat = cv2.morphologyEx(img_original, cv2.MORPH_BLACKHAT, kernel)
cv_show('f', black_hat, 3000)
